//
//  XBStack.c
//  数据结构算法和笔试题
//
//  Created by Ceasar on 16/6/8.
//  Copyright © 2016年 xiaobai. All ri,ghts reserved.
//

#include "XBStack.h"

void initStack(XBStack * statck)
{
    statck->top = -1;
}

int isEmpty(XBStack * statck)
{
    return statck->top==-1;
}
int isFull(XBStack * stack)
{
    return stack->top==MAX_SIZE-1;
}
void push(XBStack * stack,DATATYPE data)
{
    if (!isFull(stack)) {
        stack->top+=1;
        stack->data[stack->top]= data;
    }
}
void pop(XBStack *stack,DATATYPE * data)
{
    
    if (!isEmpty(stack)) {
        *data = stack->data[stack->top];
        stack->top--;
        
    }
}
//-------共享栈

//共享栈是两个栈，简化就是用了两个top标记和一个数组，一个初始值为0，另一个为数组的MAX_SIZE-1



//**********通常用于解决两个栈的空间有相反需求的关系，而且数据类型是相同的类型




//压入共享栈
int PushShareStatck(XBShareStack *stack,DATATYPE data,int stackNumber)
{
    if (stack->top1+1==stack->top2) {//满了
        return FAIL;
    }
    if (stackNumber==1) {//表示栈1元素入栈
        
        stack->data[++stack->top1] = data;
    }
    else if(stackNumber==2)
    {
        stack->data[--stack->top2]=data;
    }
    return SUCCESS;
}
int PopShareStack(XBShareStack *stack,DATATYPE * obj,int stackNumber)
{
    if (stackNumber==1) {
        
        if (stack->top1==-1) {
            
            return FAIL;
        }
        *obj=stack->data[stack->top1--];
        return SUCCESS;
    }
    else if(stackNumber==2)
    {
        if (stack->top2==MAX_SIZE) {
            return FAIL;
        }
        *obj = stack->data[stack->top2++];
    }
    return SUCCESS;
}









